A typical client computer has hundreds or thousands of software components that are used to run the computer. For example, the client computer can have at least one operating system, dozens or hundreds of software applications, and supporting libraries installed on the computer. Installation or updating these software components can be done either manually or using a package manager. One type of package manager known in the art is the RPM package manager. Package managers present a uniform way to install and/or update software programs and associated components.
To install a set of software packages, a package manager orders the packages and its dependent packages in topological order onto a graph. The package manager then collects the packages at the bottom of the graph and installs these packages first. The package manager then moves up the graph and installs the next set of packages.
A problem common with package managers is that circular dependencies can arise between mutually dependent packages. Using the graph representation described above, this will create loops in the graph. Circular dependencies can prevent installation of these mutually dependent packages. One way to handle this is to remove one of the packages from installation in order to break the loop. However, this may break the overall installation because dependent packages do not get installed.